package com.maisuiit.singleton;

import java.io.Serializable;

/**
 * 单例类实现序列化接口
 * @Author: zhangcc
 * @CreateTime: 2024-02-05
 */
public class Singleton06 implements Serializable {

    // 1. 私有构造方法
    private Singleton06() {
    }

    // 使用 volatile保证变量的可见性
    private volatile static Singleton06 instance;

    // 3. 通过添加synchronize,保证多线程模式下的单例对象的唯一性
    public static Singleton06 getInstance() {
        if (instance == null) {
            // 第一次判断,如果instance不为null,不进入抢锁阶段,直接返回实例
            synchronized (Singleton06.class) {
                // 抢到锁之后再次进行判断是否为null
                if (instance == null) {
                    instance = new Singleton06();
                }
            }}
        return instance;
    }

    /**
     * 解决方案:只要在Singleton类中定义readResolve就可以解决该问题
     * 程序会判断是否有readResolve方法,如果存在就在执行该方法,如果不存在--就创建一个对象
     */
    private Object readResolve() {
        return instance;
    }
}
